function [x_ref, y_ref, theta_ref, v_ref] = generate_figure8(t, params)
%GENERATE_FIGURE8 生成8字形参考轨迹
%
% 输入:
%   t - 时间向量
%   params - 参数结构体
%
% 输出:
%   x_ref - X坐标参考
%   y_ref - Y坐标参考
%   theta_ref - 航向角参考
%   v_ref - 速度参考

    % 8字轨迹参数
    a = 20;  % 8字的宽度系数
    b = 10;  % 8字的高度系数
    omega = 2*pi / 30;  % 角频度 (30秒完成一个周期)
    
    % 参数化曲线
    s = omega * t;
    
    % 8字轨迹方程 (Lemniscate of Gerono)
    x_ref = a * sin(s);
    y_ref = b * sin(s) .* cos(s);
    
    % 计算速度和航向角
    dx_ds = a * cos(s);
    dy_ds = b * (cos(s).^2 - sin(s).^2);
    
    % 航向角
    theta_ref = atan2(dy_ds, dx_ds);
    
    % 速度 (使用参数的标称速度)
    v_ref = params.v_nominal * ones(size(t));
    
    % 在转弯处适当降低速度
    curvature = abs(dx_ds .* (b*(-4*sin(s).*cos(s))) - ...
                    dy_ds .* (a*(-sin(s)))) ./ ...
                    (dx_ds.^2 + dy_ds.^2).^1.5;
    
    % 速度调整因子 (曲率大时减速)
    speed_factor = 1./(1 + 2*curvature);
    v_ref = v_ref .* speed_factor;
    v_ref = max(params.v_min, min(params.v_max, v_ref));
end